/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import model.estrutura.Esfera;
import model.estrutura.MalhaIrregular;
import model.estrutura.MalhaRegular;

/**
 *
 * @author Thiago
 */
public class GerenciadorMatriz implements Runnable {

    private boolean tipoVisao;      //Boolean que controla o tipo de visao
    private double[][] matrizMalha;      //Matriz dos pontos da malha
    private double[][] matrizEsfera;      //Matriz dos pontos da esfera
    private double[][] matrizCompleta;      //Matriz com os pontos da malha e da esfera
    private int posicao;         //Inteiro que diz onde acaba a malha e começa a esfera na matriz
    private int FPS;                //Numero de FPS
    private long tempoInicial;      //Tempo inicial do processamento
    private long tempoFinal;        //Tempo final do processamento
    private MalhaIrregular MI;
    private MalhaRegular MR;
    private Esfera esfera;
    private Camera camera;
    private int larguraTela;
    private int alturaTela;

    public GerenciadorMatriz(MalhaIrregular MI, MalhaRegular MR, Camera cam) {
        this.MI = MI;
        this.MR = MR;
        this.camera = cam;
    }

    public void setVisionToPerspective() {
        this.tipoVisao = true;
    }   //True

    public void setVisionToIsometric() {
        this.tipoVisao = false;
    }   //False

    @Override
    public void run() {
        this.tempoInicial = System.currentTimeMillis();

        while (true) {
            //Joga para a matriz os pontos da malha Regular ou Irregular
            if (this.MI != null) {
                if (this.MI.isVisible()) {
                    this.matrizMalha = this.MI.getMatriz();
                }
            }
            if (this.MR != null) {
                if (this.MR.isVisible()) {
                    this.matrizMalha = this.MR.getMatriz();
                }
            }
            if (this.tipoVisao) {   //Visão perspectiva
                if (this.matrizMalha != null && this.matrizEsfera != null) {
                    if (this.esfera.isVisible()) {                          //Se a esfera está visível
                        int colunasMalha = this.matrizMalha[0].length;
                        int colunasEsfera = this.matrizEsfera[0].length;
                        //Aloca a matriz final (malha + esfera)
                        this.matrizCompleta = new double[4][colunasEsfera + colunasMalha];
                        //Copia a matriz da malha para a completa
                        for (int i = 0; i < colunasMalha; i++) {
                            this.matrizCompleta[0][i] = this.matrizMalha[0][i];
                            this.matrizCompleta[1][i] = this.matrizMalha[1][i];
                            this.matrizCompleta[2][i] = this.matrizMalha[2][i];
                            this.matrizCompleta[3][i] = this.matrizMalha[3][i];
                        }
                        //Marca a posicao de onde acaba a malha na matriz completa
                        this.posicao = colunasMalha;
                        //Copia a matriz da esfera para a malha completa
                        int temp2;
                        for (int i = 0; i < colunasEsfera; i++) {
                            temp2 = colunasMalha + i;
                            this.matrizCompleta[0][temp2] = this.matrizEsfera[0][i];
                            this.matrizCompleta[1][temp2] = this.matrizEsfera[1][i];
                            this.matrizCompleta[2][temp2] = this.matrizEsfera[2][i];
                            this.matrizCompleta[3][temp2] = this.matrizEsfera[3][i];
                        }
                        Perspectiva p = new Perspectiva(this.camera, this.larguraTela, this.alturaTela, this.matrizCompleta);
                    }
                } else {

                }

            } else {

            }
        }
    }

}
